home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / share / system-config-printer / troubleshoot / ChoosePrinter.py < prev    next >
Text File  |  2009-10-19  |  6KB  |  150 lines

  1. #!/usr/bin/env python
  2.  
  3. ## Printing troubleshooter
  4.  
  5. ## Copyright (C) 2008 Red Hat, Inc.
  6. ## Copyright (C) 2008 Tim Waugh <twaugh@redhat.com>
  7.  
  8. ## This program is free software; you can redistribute it and/or modify
  9. ## it under the terms of the GNU General Public License as published by
  10. ## the Free Software Foundation; either version 2 of the License, or
  11. ## (at your option) any later version.
  12.  
  13. ## This program is distributed in the hope that it will be useful,
  14. ## but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. ## GNU General Public License for more details.
  17.  
  18. ## You should have received a copy of the GNU General Public License
  19. ## along with this program; if not, write to the Free Software
  20. ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  
  22. import cups
  23. import gobject
  24. from timedops import TimedOperation
  25. from base import *
  26. class ChoosePrinter(Question):
  27.     def __init__ (self, troubleshooter):
  28.         # First question: which printer? (page 1)
  29.         Question.__init__ (self, troubleshooter, "Choose printer")
  30.         page1 = self.initial_vbox (_("Choose Printer"),
  31.                                    _("Please select the printer you are "
  32.                                      "trying to use from the list below. "
  33.                                      "If it does not appear in the list, "
  34.                                      "select 'Not listed'."))
  35.         tv = gtk.TreeView ()
  36.         name = gtk.TreeViewColumn (_("Name"),
  37.                                    gtk.CellRendererText (), text=0)
  38.         location = gtk.TreeViewColumn (_("Location"),
  39.                                        gtk.CellRendererText (), text=1)
  40.         info = gtk.TreeViewColumn (_("Information"),
  41.                                    gtk.CellRendererText (), text=2)
  42.         name.set_property ("resizable", True)
  43.         location.set_property ("resizable", True)
  44.         info.set_property ("resizable", True)
  45.         tv.append_column (name)
  46.         tv.append_column (location)
  47.         tv.append_column (info)
  48.         tv.set_rules_hint (True)
  49.         sw = gtk.ScrolledWindow ()
  50.         sw.set_policy (gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
  51.         sw.set_shadow_type (gtk.SHADOW_IN)
  52.         sw.add (tv)
  53.         page1.pack_start (sw, True, True, 0)
  54.         self.treeview = tv
  55.         troubleshooter.new_page (page1, self)
  56.  
  57.     def display (self):
  58.         model = gtk.ListStore (gobject.TYPE_STRING,
  59.                                gobject.TYPE_STRING,
  60.                                gobject.TYPE_STRING,
  61.                                gobject.TYPE_PYOBJECT)
  62.         self.treeview.set_model (model)
  63.         iter = model.append (None)
  64.         model.set (iter, 0, _("Not listed"), 1, '', 2, '', 3, None)
  65.  
  66.         parent = self.troubleshooter.get_window ()
  67.         try:
  68.             cups.setServer ('')
  69.             c = self.timedop (cups.Connection, parent=parent).run ()
  70.             dests = self.timedop (c.getDests, parent=parent).run ()
  71.             printers = None
  72.             dests_list = []
  73.             for (name, instance), dest in dests.iteritems ():
  74.                 if name == None:
  75.                     continue
  76.  
  77.                 if instance != None:
  78.                     queue = "%s/%s" % (name, instance)
  79.                 else:
  80.                     queue = name
  81.  
  82.                 if printers == None:
  83.                     printers = self.timedop (c.getPrinters,
  84.                                              parent=parent).run ()
  85.  
  86.                 if not printers.has_key (name):
  87.                     info = _("Unknown")
  88.                     location = _("Unknown")
  89.                 else:
  90.                     printer = printers[name]
  91.                     info = printer.get('printer-info', _("Unknown"))
  92.                     location = printer.get('printer-location', _("Unknown"))
  93.  
  94.                 dests_list.append ((queue, location, info, dest))
  95.  
  96.             dests_list.sort (lambda x, y: cmp (x[0], y[0]))
  97.             for queue, location, info, dest in dests_list:
  98.                 iter = model.append (None)
  99.                 model.set (iter, 0, queue, 1, location, 2, info, 3, dest)
  100.  
  101.         except cups.HTTPError:
  102.             pass
  103.         except cups.IPPError:
  104.             pass
  105.         except RuntimeError:
  106.             pass
  107.  
  108.         return True
  109.  
  110.     def connect_signals (self, handler):
  111.         self.signal_id = self.treeview.connect ("cursor-changed", handler)
  112.  
  113.     def disconnect_signals (self):
  114.         self.treeview.disconnect (self.signal_id)
  115.  
  116.     def can_click_forward (self):
  117.         model, iter = self.treeview.get_selection ().get_selected ()
  118.         if iter == None:
  119.             return False
  120.         return True
  121.  
  122.     def collect_answer (self):
  123.         model, iter = self.treeview.get_selection ().get_selected ()
  124.         dest = model.get_value (iter, 3)
  125.         if dest == None:
  126.             class enum_dests:
  127.                 def __init__ (self, model):
  128.                     self.dests = []
  129.                     model.foreach (self.each, None)
  130.  
  131.                 def each (self, model, path, iter, user_data):
  132.                     dest = model.get_value (iter, 3)
  133.                     if dest:
  134.                         self.dests.append ((dest.name, dest.instance))
  135.  
  136.             return { 'cups_queue_listed': False,
  137.                      'cups_dests_available': enum_dests (model).dests }
  138.         else:
  139.             return { 'cups_queue_listed': True,
  140.                      'cups_dest': dest,
  141.                      'cups_queue': dest.name,
  142.                      'cups_instance': dest.instance }
  143.  
  144.     def cancel_operation (self):
  145.         self.op.cancel ()
  146.  
  147.     def timedop (self, *args, **kwargs):
  148.         self.op = TimedOperation (*args, **kwargs)
  149.         return self.op
  150.